package com.pengy.shengxian.service;

import com.pengy.shengxian.entity.GoodsInfo;
import com.pengy.shengxian.mapper.GoodsInfoMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

@Service
public class DatabaseService {

    private static final Logger logger = LoggerFactory.getLogger(DatabaseService.class);

    @Autowired
    private GoodsInfoMapper goodsInfoMapper;
    
    @Autowired
    private DataSource dataSource;

    /**
     * 保存商品信息到数据库
     * @param goodsInfos 商品信息列表
     * @return 保存的记录数
     */
    public int saveGoodsInfos(List<GoodsInfo> goodsInfos) {
        if (goodsInfos == null || goodsInfos.isEmpty()) {
            logger.warn("商品信息列表为空，跳过保存");
            return 0;
        }

        try {
            // 先删除所有现有数据
            int deletedCount = goodsInfoMapper.deleteAll();
            logger.info("删除现有商品信息数据: {} 条", deletedCount);
            
            // 批量插入新数据
            int insertedCount = goodsInfoMapper.batchInsert(goodsInfos);
            
            logger.info("成功保存商品信息数据: {} 条", insertedCount);
            return insertedCount;
            
        } catch (Exception e) {
            logger.error("保存商品信息到数据库时发生错误", e);
            throw new RuntimeException("保存数据到数据库失败: " + e.getMessage(), e);
        }
    }

    /**
     * 测试数据库连接
     * @return 连接是否成功
     */
    public boolean testConnection() {
        try (Connection connection = dataSource.getConnection()) {
            logger.info("数据库连接测试成功 - URL: {}, 用户名: {}", 
                       connection.getMetaData().getURL(),
                       connection.getMetaData().getUserName());
            return true;
        } catch (SQLException e) {
            logger.error("数据库连接测试失败", e);
            return false;
        }
    }

    /**
     * 测试 MyBatis 配置
     * @return 配置是否正确
     */
    public boolean testMyBatisConfiguration() {
        try {
            // 尝试执行一个简单的查询
            goodsInfoMapper.deleteAll(); // 这个操作应该能正常执行
            logger.info("MyBatis 配置测试成功");
            return true;
        } catch (Exception e) {
            logger.error("MyBatis 配置测试失败", e);
            return false;
        }
    }
    
    /**
     * 获取数据库连接信息
     */
    public String getDatabaseInfo() {
        try (Connection connection = dataSource.getConnection()) {
            return String.format("数据库: %s, 版本: %s, 用户名: %s", 
                               connection.getCatalog(),
                               connection.getMetaData().getDatabaseProductVersion(),
                               connection.getMetaData().getUserName());
        } catch (SQLException e) {
            logger.error("获取数据库信息失败", e);
            return "获取数据库信息失败: " + e.getMessage();
        }
    }
}